package com.itany.shop.util;

import java.util.List;

/**
 * @author 石小俊
 * @date 2023年06月06日 15:59
 */
public class PageInfo<T> {
    private int total; // 总数据条数
    private int pages; // 总页数
    private int pageNo; // 当前页
    private int pageSize; // 每页最大数据条数
    private List<T> list; // 当前页的数据

    /**
     * 实例化的时候对于总数据条数与总页数是不能全部自定义的
     * 因为两者之间存在一定的关系,如果随便定义数据,会导致数据有误,无法得出正确结果
     * 因此,在实例化的时候,我们需要根据分页关系计算出对应的总页数
     * @param total
     * @param pageNo
     * @param pageSize
     * @param list
     */
    public PageInfo(int total, int pageNo, int pageSize, List<T> list) {
        this.total = total;
        this.pageNo = pageNo;
        this.pageSize = pageSize;
        this.list = list;
        // 计算总页数
        pages = total % pageSize == 0 ? total / pageSize : total / pageSize + 1;
    }

    /**
     * 获取上一页,如果不是第一页,则直接使用pageNo - 1
     * 如果是第一页,没有上一页,直接使用第一页代替
     * @return 返回上一页页码数pageNo
     */
    public int getPrePage() {
        return pageNo > 1 ? pageNo - 1 : 1;
    }

    /**
     * 获取下一页,如果不是最后一页,则直接使用pageNo + 1
     * 如果是最后一页,没有下一页,直接使用最后一页代替
     * @return
     */
    public int getNextPage() {
        return pageNo < pages ? pageNo + 1 : pages;
    }

    /**
     * 获取首页,即第一页
     * @return
     */
    public int getHeadPage() {
        return 1;
    }

    /**
     * 获取尾页,即最后一页
     * @return
     */
    public int getFootPage() {
        return pages;
    }

    public int getTotal() {
        return total;
    }

    public int getPages() {
        return pages;
    }

    public int getPageNo() {
        return pageNo;
    }

    public int getPageSize() {
        return pageSize;
    }

    public List<T> getList() {
        return list;
    }
}
